# -*- coding: utf-8 -*-
"""
Created on Fri Aug 11 19:15:57 2023

@author: skunk69
"""

import json

def item_seq(astr,Num):
    LL = []
    for i in range(1,Num+1):
        LL = LL+[astr+str(i)]
    return LL

chinese_name = u'老年精神评定量表'
english_name = 'Psycho-geriatric Assessment Scales'
abbreviation = 'PAS'
category = u'精神病学临床量表'

outline = u"""《老年精神评定量表》（Psycho-geriatric Assessment Scales，PAS）是由澳大利亚的Jorm等在1994年编制的筛查量表，用于评定老年人的认知受损、认知功能下降、抑郁、行为改变以及卒中等各方面情况。PAS量表可以作为老年痴呆与老年抑郁两种疾病的筛查量表。
1999年，贾西津等在北京地区进行了PAS量表的临床测试和社区测试，结果显示PAS量表具有良好信度，基本符合中国老人文化背景，可用于对每个老人综合详细评定，适合于社区保健和随访研究。"""

instruction = u""""""

# background information
background_elderly = {
    1:u'请告诉我您的姓名？',
    2:u'请告诉我您是哪一年出生的？',
    3:u'您今年多大年纪了？',
    4:u'您的出生地在哪里？',
    }
background_insider = {
    1:u'您与被访老人是什么关系？',
    2:u'您认识被访老人多长时间了？',
    3:u'您是否与被访老人经常见面？',
    4:u'被访老人多大年纪了？',
    5:u'被访老人从多少岁起离开学校后就再也未上过学了？',
    }

hints = {}
items = {}
rating = {}
score_rules = {}
# stroke for the interviewed elderly
hints['S1'] = u'您是否曾患过或曾有人告诉您患过以下疾病：'
hints['S3'] = u'您是否曾（包括回答时的当前情况）：'

items['S1'] = u'卒中？'
items['S2'] = u'连续小卒中或暂时性缺血发作（TIAs）？'
items['S3'] = u'有过身体一侧突然无力但现已好转'
items['S4'] = u'有过突然说话困难'
items['S5'] = u'有过突然视力严重下降'
items['S6'] = u'有过突然记忆力严重下降'

SS = item_seq('S',6)
for ss in SS:
    rating[ss] = [u'没有',u'有过',u'不知道']
    score_rules[ss] = [0,1,None]

# depression
hints['D1'] = u'现在我想问您一些您的自我感觉问题'
hints['D8'] = u'现在我想问您一些您的思维问题'
hints['D12'] = u'随着年事增高，有些人感到比早年更多地想到死亡？'

items['D1'] = u'在过去的两周里您是否感到有过某些抑郁或忧伤？'
items['D2'] = u'在过去的两周里您睡眠是否有过困难？'
items['D3'] = u'在过去的两周里您是否用过什么药以帮助睡眠？'
items['D4'] = u'在过去的两周里您即使没有做什么工作，是否也感到疲乏或没有一点劲？'
items['D5'] = u'在过去的两周里您是否比您平常说话或动作慢了很多？'
items['D6'] = u'在过去的两周里您是否必须不停地活动身体的某些部位，就是说您不能安静下来以致无法静坐？'
items['D7'] = u'在过去的两周里您是否经常感觉缺乏自信心或感到总是无把握？'
items['D8'] = u'在过去的两周里您的思维是否比您平常缓慢了很多？'
items['D9'] = u'在过去的两周里您的注意力是否不容易集中？'
items['D10'] = u'在过去的两周里您的思维是否好像很混乱，以致无法理出个头绪来？'
items['D11'] = u'在过去的两周里您是否有过对事情难于作出决定？'
items['D12'] = u'在过去的两周里您是否感到过好像活着没意思（想死）？'

SS = item_seq('D',12)
for ss in SS:
    rating[ss] = [u'没有',u'看情况',u'有过',u'不知道']
    score_rules[ss] = [0,0,1,None]

# cognitive impairment
hints['C1'] = u"""现在让我提一些问题以检查您的注意力和记忆力，多数问题都很简单。
我说出三种东西的名称，我说完后，要求您重复这三件东西的名称。
请记住这些名称，因为过几分钟后，我会要求您再说出这些名称。
大树，钟表，汽车。
"""
hints['C3'] = u"""请仔细听我下面说的姓名和地址，然后请您自己重复一遍。
王文海，北京市，花园路，51号。
请记住这个地址和姓名，等一会我会再问您。"""

items['C1'] = u'我给您一张纸，请您在纸上写下一句完整的句子。'
items['C2'] = [
    u'我刚才要求您记住的三件东西的名称是什么？',
    {1:u'大树',2:u'钟表',3:u'汽车'}
    ]
items['C3'] = [
    u'我现在说出一些知名人物的名字，请告诉我他们是什么人，在过去为什么这样出名。',
    {
     1:u'梅兰芳（京剧大师，男扮女装，旦角演员）',
     2:u'毛泽东(中国共产党主席，国家领导人，伟大领袖)',
     3:u'诸葛亮（汉蜀丞相，军师，聪明人）',
     4:u'慈禧太后（清朝皇太后，光绪皇帝母亲，卖国贼）'
     }
    ]
items['C4'] = u'元旦是哪一天？'
items['C5'] = [
    u'刚才，我请您记住的姓名和地址还记得吗？',
    {
     1:u'王文海',
     2:u'北京市',
     3:u'花园路',
     4:u'51号'
     }
    ]
items['C6'] = u'这是一幅画，请在这张纸上照样画一个。'
items['C7'] = u'大声读出这张纸上写的字，并按照字的意思做动作。（出示写有“请张开您的嘴”字句的纸）'
items['C8'] = u'声读出这张纸上写的字，并按照字的意思做动作。（出示写有“用力咳嗽”字句的纸）'
items['C9'] = [
    u'请告诉我，这幅图画画的是些什么东西？（出示画有四样东西的纸）',
    {
     1:u'茶壶，水壶',
     2:u'电话',
     3:u'剪刀',
     4:u'叉子'}
    ]

rate = [u'正确',u'不正确或拒绝',u'未提问']
score = [0,1,None]
SS = item_seq('C',9)
for ss in SS:
    rating[ss] = rate
    score_rules[ss] = score

# stroke for the insider
hints['IS1'] = u'她/他是否曾患过或曾有人告诉她/他患过以下疾病：'
hints['IS3'] = u'她/他是否曾（包括回答时的当前情况）：'

items['IS1'] = u'卒中？'
items['IS2'] = u'连续小卒中或暂时性缺血发作（TIAs）？'
items['IS3'] = u'有过身体一侧突然无力但现已好转'
items['IS4'] = u'有过突然说话困难'
items['IS5'] = u'有过突然视力严重下降'
items['IS6'] = u'有过突然记忆力严重下降'

SS = item_seq('IS',6)
for ss in SS:
    rating[ss] = [u'没有',u'有过',u'不知道']
    score_rules[ss] = [0,1,None]

# cognitive decline
hints['CD1'] = u'现在我想问一些被访老人在某些特定情境下的情况，以及与其早年相比，在这些情况下，其记忆是否变得差了。'
items['CD1'] = u'当她/他在只有一个人的时候，去原本熟悉的地方（如自己住地、邻居家、商店、至亲好友的家），近来要再找到路也困难了？'
rating['CD1'] = [u'没有困难或不认为有困难',u'有些或偶有困难',u'经常有困难',u'已经卧床不起，不能活动',u'不知道']
score_rules['CD1'] = [0,1,1,1,None]

items['CD2'] = u'她/他是否对新近才发生的事情，回忆起来已很困难？'
rating['CD2'] = [u'没有困难',u'比以前困难一些',u'是的，困难多了',u'不知道']
score_rules['CD2'] = [0,1,1,None]

items['CD3'] = u'她/他是否更容易忘记把东西放在什么地方了？'
rating['CD3'] = [u'没有困难',u'比以前困难一些',u'是的，困难多了',u'不知道']
score_rules['CD3'] = [0,1,1,None]

items['CD4'] = u'她/他是否对谈过的话，隔几天后回忆起来更加困难了？'
rating['CD4'] = [u'没有困难',u'比以前困难一些',u'是的，困难多了',u'不知道']
score_rules['CD4'] = [0,1,1,None]

items['CD5'] = u'她/他是否对原与人约定的事情和社会活动要记起来更为困难了？'
rating['CD5'] = [u'没有困难',u'比以前困难一些',u'是的，困难多了',u'不知道']
score_rules['CD5'] = [0,1,1,None]

items['CD6'] = u'她/他即使视力相当好，但对家人和朋友的面貌是否也更难以辨认了？'
rating['CD6'] = [u'没有困难',u'比以前困难一些',u'是的，困难多了',u'不知道']
score_rules['CD6'] = [0,1,1,None]

items['CD7'] = u'她/他在处理钱财方面（如去银行存钱/取钱、决定如何以及在何处花钱等），是否需要别人帮助？'
rating['CD7'] = [u'不需要，没有困难',u'需要，但能管理日常采购',u'需要，已不能管理钱财',u'除日常采购外，从未管过钱财',u'不知道']
score_rules['CD7'] = [0,1,1,0,None]

items['CD8'] = u'她/他注意力集中最近是否更加困难？'
rating['CD8'] = [u'没有',u'看情况',u'是的',u'不知道']
score_rules['CD8'] = [0,0,1,None]

items['CD9'] = u'近来她/他的思维是否好像很混乱，以致无法理出头绪来？'
rating['CD9'] = [u'与平常没有什么不同',u'看情况',u'是的',u'不知道']
score_rules['CD9'] = [0,0,1,None]

items['CD10'] = u'近来她/他是否对做什么事情都难于下定决心？'
rating['CD10'] = [u'与平常没有什么不同（包括不做决定）',u'看情况',u'有过',u'不知道']
score_rules['CD10'] = [0,0,1,None]

# behavior change
ss = [u'与早年相比有无变化？',{1:u'没有',2:u'有变化',3:'不知道'}]
hints['B1'] = u'下面是一些有关被访老人的行为方面的问题。'
items['B1'] = u'她/他是否缺乏主动性？'
rating['B1'] = [u'未见缺乏',[u'缺乏',ss],u'不知道']

items['B2'] = u'她/他是否不断提出要求和寻求注意？'
rating['B2'] = [u'不是',[u'是',ss],u'不知道']

items['B3'] = u'她/他是否过分情绪不稳定？'
rating['B3'] = [u'没有',[u'有',ss],u'不知道']

items['B4'] = u'她/他是否愿意与人交往？'
rating['B4'] = [u'愿意',[u'不愿意',ss],u'不知道']

items['B5'] = u'她/他是否冷漠和退缩？'
rating['B5'] = [u'没有',[u'是',ss],u'不知道']

items['B6'] = u'她/他是否容易激动烦躁？'
rating['B6'] = [u'不是',[u'是',ss],u'不知道']

items['B7'] = u'她/他是否是个容易与人相处的人？'
rating['B7'] = [u'是的',[u'不是',ss],u'不知道']

items['B8'] = u'她/他是否没有耐心，总是要做一件事就立刻要办到？'
rating['B8'] = [u'不是',[u'是',ss],u'不知道']

items['B9'] = u'她/他是否总怀疑他人？'
rating['B9'] = [u'不是',[u'是',ss],u'不知道']

items['B10'] = u'她/他是否很固执，以至于在必须改变时，仍不改变自己的行为方式？'
rating['B10'] = [u'并不固执',[u'固执',ss],u'不知道']

items['B11'] = u'她/他是否脾气不好，爱争吵？'
rating['B11'] = [u'不是',[u'是',ss],u'不知道']

items['B12'] = u'她/他的心情是否特别忧伤或压抑？'
rating['B12'] = [u'不是',[u'是',ss],u'不知道']

items['B13'] = u'她/他是否不需要别人提醒，也能使自己仪表保持相当整洁和受人尊敬？'
rating['B13'] = [u'不需要',[u'有时或总需提醒',ss],u'不知道']

items['B14'] = u'她/他是否不顾他人反应如何总喜欢自行其是？'
rating['B14'] = [u'不是，或偶尔自行其是',[u'有时是，或大多数是',ss],u'不知道']

items['B15'] = u'她/他是否在社交或公共场合，行为使他人为难或不安？'
rating['B15'] = [u'从不，或极少有',[u'有时，或经常有',ss],u'不知道']

score = [0,[0,1,None],None]
SS = item_seq('B',15)
for ss in SS:
    score_rules[ss] = score

reverse_items = []
scales = [u'卒中（被试人会谈）',u'抑郁',u'认知受损',
          u'卒中（知情人会谈）',u'认知功能下降',u'行为改变']
scales_items = [
    item_seq('S',6),# Stroke
    item_seq('D',12),# Depression
    item_seq('C',9),# Cognitive impairment
    item_seq('IS',6),# Insider Stroke
    item_seq('CD',10),# Cognitive Decline
    item_seq('B',15), # Behavior   
    ]
factors = [u'被试人会谈',u'知情人会谈']
factors_scales = [
    [u'卒中（被试人会谈）',u'抑郁',u'认知受损'],
    [u'卒中（知情人会谈）',u'认知功能下降',u'行为改变']
    ]

contents = {
    'instruction':instruction,
    'background_elderly':background_elderly,
    'background_insider':background_insider,
    'hints':hints,
    'items':items,
    'reverse_items':reverse_items,
    'scales':scales,
    'scales_items':scales_items,
    'factors':factors,
    'factors_scales':factors_scales,
    'rating':rating,
    'score_rules':score_rules       
    }

implementation = u"""《老年精神评定量表》分为被试人和知情人会谈两部分。"""

reliability = u"""贾西津等在北京地区选取了临床测试和社区测试样本。结果分析显示，PAS各分量表和全量表的一致性系数和重测信度系数都比较理想。"""
validity = u"""在北京样本测试中，因子分析表明，PAS量表的结构效度良好。在效标效度方面，由PAS各分量表与其他常用量表的相关性分析体现出来。"""
measurements = {'reliability':reliability,'validity':validity}

interpretation = u"""PAS全量表评分准则为：没有该症状或回答问题正确评分为0分，有症状或者回答错误或者拒绝回答评分为1分，不知道或者未提问则记为问号“？”。假设每个分量表中问号“？”的数目为N，每个分量表的计分公式如下：
（1）卒中（被访老人会谈）：设S为条目S1~S6的总得分，则分量表得分=6XS/(6-N)。
（2）抑郁：设D为条目D1~D12的总得分，则分量表得分=12XD/(12-N)。
（3）认知受损：设C为条目C1~C9的总得分，则分量表得分=20XC/(20-N)。
（4）卒中（知情人会谈）：设IS为条目IS1~IS6的总得分，则分量表得分=6XIS/(6-N)。
（5）认知功能下降：设CD为条目CD1~CD10的总得分，则分量表得分=10XCD/(10-N)。
（6）行为改变：设B为条目B1~B15的总得分，则分量表得分=15XB/(15-N)。
所有条目得分之和即为该量表的总分，总分越高，表示受损越严重。
各分量表的用途：认知受损和认知功能下降分量表用于痴呆筛查，抑郁分量表用于老年抑郁症筛查，行为改变分量表没有特异性，既可受痴呆也可受抑郁影响；卒中分量表用于区别血管型痴呆或非血管型痴呆（主要是阿尔海默病）。"""

applications = u"""贾西津等依据社区调查结果建立了PAS参考常模。"""

this_scale = {
    'chinese_name':chinese_name,
    'english_name':english_name,
    'abbreviation':abbreviation,
    'category':category,
    'outline':outline,
    'contents':contents,
    'implementation':implementation,
    'measurements':measurements,
    'interpretation':interpretation,
    'applications':applications    
    }

with open(abbreviation+'.json','w+',encoding='utf-8') as f:
    json.dump(this_scale,f,indent=2,ensure_ascii=False)